package com.cheng.config;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.ibatis.annotations.Mapper;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 代码生成器
 * @author cheng-qiang
 * @date 2022年08月02日9:46
 */
public class UserCountGenerator {

    public static void main(String[] args) {
        /*定义表名集合*/
        List<String> tables = new ArrayList<>();
        tables.add("bt_account_user");
        tables.add("bt_account_menu");
        tables.add("bt_account_resources");
        tables.add("bt_account_role");
        tables.add("bt_institutions_type");
        tables.add("bt_role_menu");
        tables.add("bt_role_resources");
        tables.add("bt_sys_institutions");
        tables.add("bt_user_landscape");
        tables.add("bt_user_role");
        /*全局配置*/
        FastAutoGenerator.create("jdbc:mysql://p5v7lf0v0381.us-east-4.psdb.cloud:3306/cheng-qiang?characterEncoding=UTF-8&useSSL=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai","bw4vqrtvy6am","pscale_pw_SaqayyYxogNcJ93dvlQ0tfduFHloZBDlBf7Mu_r7Bj8")
                .globalConfig(builder -> builder.author("山水一程")               //作者
                        .outputDir(System.getProperty("user.dir")+"\\mybatis-plus\\user-count\\src\\main\\java")    //输出路径(写到java目录)
                        .enableSwagger()           //开启swagger
                        .commentDate("yyyy-MM-dd"))
                /*包配置*/
                .packageConfig(builder -> builder.parent("com.cheng")
                        .moduleName("generator")
                        .entity("entity")
                        .service("service")
                        .serviceImpl("service.impl")
                        .controller("controller")
                        .mapper("mapper")
                        .xml("mapper")
                        .pathInfo(Collections.singletonMap(OutputFile.xml,System.getProperty("user.dir")+"\\mybatis-plus\\user-count\\src\\main\\resources\\mapper")))
                /*策略配置*/
                .strategyConfig(builder -> {
                    builder.addInclude(tables)                                                         // 配置要生成的表名,这里是一个表名集合
                            .addTablePrefix("bt_")                                                       // 过滤表名前缀,如p_test,我们生成的类名只需要test
                            .serviceBuilder()                                                                 //  service策略配置
                            .enableFileOverride()
                            .formatServiceFileName("%sService")                             //  service类名,%s适配,根据表名替换
                            .formatServiceImplFileName("%sServiceImpl")
                            .entityBuilder()                                                                   //  实体类策略配置
                            .enableFileOverride()
                            .enableLombok()                                                                  //  开启lombok
                            .logicDeleteColumnName("tombstone")                              //  指定逻辑删除字段
                            .enableTableFieldAnnotation()                                            //  属性加上说明注解
                            .controllerBuilder()                                                             //  controller策略配置
                            .enableFileOverride()
                            .enableHyphenStyle()                                                          //  映射路径使用连字符格式，而不是驼峰
                            .formatFileName("%sController")
                            .enableRestStyle()                                                             //  开启RestController
                            .mapperBuilder()                                                                 //  mapper策略配置
                            .enableBaseResultMap()                                                     //  生成通用的resultMap
                            .superClass(BaseMapper.class)                                           //  继承哪个父类
                            .formatMapperFileName("%sMapper")
                            .formatXmlFileName("%sMapper")
                            .mapperAnnotation(Mapper.class)                                       //  开启@Mapper 注解
                            .enableFileOverride();                                                        //  覆盖已有文件
                })
                .templateConfig(builder -> {
                    // 实体类使用我们自定义模板
                    builder.entity("templates/CustomizedEntity.java");
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
